#ifndef MATRIZ_H_
#define MATRIZ_H_

#include <vector>
#include "matrizabstracta.h"

using namespace std;

/**
 * Implementación trivial de MatrizAbstracta.
 */
class Matriz : public MatrizAbstracta {
	public :

		/**
		 * Constructor por defecto
		 */
		Matriz(Tam cantidadDeFilas = 0, Tam cantidadDeColumnas = 0);

		/**
		 * Implementación del método get.
		 */
		double get(Indice fila, Indice columna) const;

		/**
		 * Implementación del método set.
		 */
		void set(Indice fila, Indice columna, double valor);

		/**
		 * Devuelve la cantidad de filas de la matriz.
		 */
		Tam cantidadDeFilas() const;

		/**
		 * Devuelve la cantidad de columnas de la matriz.
		 */
		Tam cantidadDeColumnas() const;

		/**
		 * Establece el tamaño del parabrisas.
		 */
		void setTam(Tam cantidadDeFilas, Tam cantidadDeColumnas);

		/**
		* Devuelve la posicion del maximo elemento (absoluto) de la submatriz
		*/
		void getPosicionMaxElementoSubmatriz(Indice submatriz, Indice& fila, Indice& columna);

		/**
		* Intercambia las columnas
		*/
		void swapColumna(Indice columna1, Indice columna2);

		/**
		* Intercambia las filas
		*/
		void swapFila(Indice fila1, Indice fila2);
		
		void copiarMatriz(const Matriz* m);
		
		void trasponer();

	private :
		Tam				_cantidadDeFilas;
		Tam				_cantidadDeColumnas;
		vector<double>	_vector;
};

#endif /*MATRIZ_H_*/
